ProgressionのAddChildAtAboveを調べた
- 2008 年 12月 7 日
ProgressionのAPIドキュメントを読んで、AddChildAtコマンドと、AddChildAtAboveコマンドの説明は、まったく同じじゃないかと疑問に思ったので調べてみました。
AddChildはaddChildのコマンド版と理解できているので、AddChildAtAbobeっていうのは英語力の拙さのせいでわからないのかと思い、まず辞書でAbobeを調べてみる。
プログレッシブ英和中辞典より
1 …より上に[へ], より高く[い](over)(⇔below);…よりすぐ上に(⇔beneath)
ってことでしたので、指定位置の上に表示オブジェクトを加えるのだろうなぁと想像がつきます。試してみてもそんな感じで動作するし…。曖昧なのが気持ちわるかったのでクラスファイルを開いてみると、その通りでした。
AddChildAtAbove.as
if ( _container is IExDisplayObjectContainer ) { IExDisplayObjectContainer( _container ).addChildAtAbove( _display, _index ); } else { _container.addChildAt( _display, _index ); } |
AddChildAt.asだと、
_container.addChildAt( _display, _index ); |
の動作しかないです。
IExDisplayObjectContainer( _container ).addChildAtAbove( _display, _index ); |
が動作してその後、ごにょごにょと継承を介してChildIndexerクラスのaddChildAtAboveが実行される。この時、ディスプレイオブジェクトに追加しようとしたのインデックス位置の一つ上に追加されます。
ただし、ProgressionのIExDisplayObjectContainerインタフェースを備えているディスプレイオブジェクトの場合のみ。
指定インデックスの上に追加したいって時は結構出てくると思います。addChildや、addChildAtだとそれだけでは書けないわけで、この辺も本当にかゆいところに手が届くというか、よく出来ているなぁと関心してしまいます。
AddChildAtの場合
指定インデックスに追加される
addCommand( new AddChildAt( progression.container, myCastMovieClip, 0 ), new AddChildAt( progression.container, myCastSprite, 1 ), new AddChildAt( progression.container, myChild, 1 ) ); |
AddChildAt
AddChildAboveの場合
指定インデックスの一つ上に追加される
addCommand( new AddChildAt( progression.container, myCastMovieClip, 0 ), new AddChildAt( progression.container, myCastSprite, 1 ), new AddChildAtAbove( progression.container, myChild, 1 ) ); |
AddChildAtAbove
IExDisplayObjectContainerを持たないディスプレイオブジェクトにAddChildAtAboveしてもAddChildAtと同様
addCommand( new AddChildAt( progression.container, mySprite, 0 ), new AddChildAt( mySprite, myCastSprite, 1 ), new AddChildAtAbove( mySprite, myChild, 1 ) ); |
AddChildAt(Sprite)